<?php
require_once '../../ThinkPHP/Extend/Vendor/WxPay/AutoLoad.php';
require_once 'log.php';
//初始化日志
$logHandler= new CLogFileHandler("../Runtime/Logs/Pay-".date('Y-m').'.log');
$log = Log::Init($logHandler, 15);

require_once '../Common/webservice.php';

class PayNotifyCallBack extends WxPayNotify
{
	//查询订单
	public function Queryorder($transaction_id)
	{
		$input = new WxPayOrderQuery();
		$input->SetTransaction_id($transaction_id);
		$result = WxPayApi::orderQuery($input);
// 		Log::DEBUG("query:" . json_encode($result));
		if(array_key_exists("return_code", $result)
				&& array_key_exists("result_code", $result)
				&& $result["return_code"] == "SUCCESS"
				&& $result["result_code"] == "SUCCESS")
		{
			return true;
		}
		return false;
	}

	//重写回调处理函数
	public function NotifyProcess($data, &$msg)
	{
		Log::DEBUG("call back:" . json_encode($data));
		$notfiyOutput = array();

		if(!array_key_exists("transaction_id", $data)){
			$msg = "输入参数不正确";
			return false;
		}
		//查询订单，判断订单真实性
		if(!$this->Queryorder($data["transaction_id"])){
			$msg = "订单查询失败";
			return false;
		}

		
		
		Log::DEBUG("success:" . ($data['out_trade_no']));

		$verify = md5($data['out_trade_no']."__meiyetong__".$data['cash_fee']);
		$hash = md5($data['transaction_id'].$data['out_trade_no'].$data['cash_fee']);
		
		//************************************************************
		//支付接口
		//
		$postData = array(
			"order_no"		=> $data['out_trade_no'],
			"payBank"		=> '微信支付',
			"card_no"		=> '微信支付',
			"money"			=> $data['cash_fee'],
			"ip" 			=> $_SERVER['REMOTE_ADDR'],
			"user" 			=> 'system',
			"txn_id" 		=> $data['transaction_id'],
			"payType" 		=> 'pay',
			"commentStr" 	=> $data['openid'],
			"data"  		=> serialize($data),
			"verify"		=> $verify,
			"hash"			=> $hash
		);
		
		Log::DEBUG("WebService Post:" . print_r($postData,true));
		
		$info = WebService('System', 'OrderPaySuccess', array(), $postData);
		//************************************************************
		Log::DEBUG("WebService:" . print_r($info,true));
		
		
		
		if($info=='success'){
			//结算
			$getData = array(
					"orderno"	=> $data['out_trade_no']
			);
			$info = WebService('pe', 'Order', 'OrderConfirm', $getData);
			return true;
		}else{
			return false;
		}
// 		return true;
	}
}


Log::DEBUG("Access:" . $_SERVER['REMOTE_ADDR']);
// error_reporting(0);
$notify = new PayNotifyCallBack();
$notify->Handle(false);


?>